#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <stdint.h> 
#include "usart2.h"
#include "resister.h"

#define SUCCESS 0
#define FAILURE 1




extern uint16_t RWdat[6];
uint8_t readHoldRegisters(int sockfd,uint8_t addr,uint16_t registerStartaddr,uint16_t registernum);//fuction:03 ,读取单个或多个保持寄存器值。addr:从机地址   registerStartaddr：寄存器起始地址   registernum：读取寄存器数量 
uint8_t readInputRegisters(int sockfd,uint8_t addr,uint16_t registerStartaddr,uint16_t registernum);// fuction:04
uint8_t presetSingleRegister(int sockfd,uint8_t addr,uint16_t registeraddr,uint16_t tempData); //fuction:06, 设置单个寄存器值。addr:从机地址,registeraddr：寄存器地址,tempData ：欲设置的值
uint8_t presetMultipleRegisters(int sockfd,uint8_t addr,uint16_t RegisterStartAddr,uint16_t registerNum);//fuction:16 读取单个或多个寄存器值。addr:从机地址   registerStartaddr：寄存器起始地址   registernum：设置寄存器数量  
uint8_t presetMultipleCoils(int sockfd,uint8_t addr,uint16_t RegisterStartAddr,uint16_t bitCount);//fuction15:强置多个线圈值	addr:从机地址   registerStartaddr：寄存器起始地址  bitCount:寄存器个数（设置的值为寄存器地址对应本地变量的值）
uint8_t readInputCoils(int sockfd,uint8_t addr,uint16_t registerStartaddr,uint16_t bitCount); //fuction:02 读输入线圈状态 
uint8_t readCoils(int sockfd,uint8_t addr,uint16_t registerStartaddr,uint16_t bitCount);//fuction:01 读单个或多个线圈状态 addr:从机地址 registerStartaddr：寄存器起始地址  bitCount寄存器个数
uint8_t presetSingleCoil(int sockfd,uint8_t addr,uint16_t registeraddr,uint16_t tempData);	  // 设置单片线圈值fuction:05addr:从机地址,registeraddr：寄存器地址,tempData ：欲设置的值(限0x00 ,0xff00) 
//注意：fuction05 tempDat欲设置的值(限0x00 ,0xff00);
/*************移植说明**********
1.在自己工程的主函数头文件加入#include "ModbusHost.h"，并加	 "ModbusHost.c"添加到自己的工程
2.此程序针对51，其它处理器请根据模板修改定时器初始化、定时器中断、串口初始化、串口中断程序 即可
3.根据从机地址定义相同的寄存器地址和变量。并将自己工程的变量加入数据交换函数
uint16_t setCoilVal(uint16_t addr,uint16_t tempData);
uint16_t getRegisterVal(uint16_t addr,uint16_t *tempData);
uint16_t setRegisterVal(uint16_t addr,uint16_t tempData);
uint16_t getCoilVal(uint16_t addr,uint16_t *tempData);
4.主函数调用 以上fuction03 06等函数即可完成主机<->从机数据交换。





********************************/

uint8_t uartrcv(int sockfd, uint8_t buff[], uint8_t len, int timeOutCount);

